package masking.wechat.sdk.mp;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import masking.wechat.sdk.MPAccount;

public class MessageProcessor {

	/** 返回消息类型：音乐 */
	public static final String MESSAGE_TYPE_MUSIC = "music";

	/** 返回消息类型：图文 */
	public static final String MESSAGE_TYPE_NEWS = "news";

	/** 请求消息类型：文本 */
	public static final String MESSAGE_TYPE_TEXT = "text";

	/** 请求消息类型：图片 */
	public static final String MESSAGE_TYPE_IMAGE = "image";

	/** 请求消息类型：链接 */
	public static final String MESSAGE_TYPE_LINK = "link";

	/** 请求消息类型：地理位置 */
	public static final String MESSAGE_TYPE_LOCATION = "location";

	/** 请求消息类型：音频 */
	public static final String MESSAGE_TYPE_VOICE = "voice";

	/** 请求消息类型：推送 */
	public static final String MESSAGE_TYPE_EVENT = "event";

	/** 事件类型：subscribe(订阅) */
	public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";

	/** 事件类型：unsubscribe(取消订阅) */
	public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";

	/** 事件类型：CLICK(自定义菜单点击事件) */
	public static final String EVENT_TYPE_CLICK = "CLICK";
	
	
	/**
	 * @Description: 解析微信发来的请求（XML）
	 */
	public static Map<String, String> parseMessage(InputStream in) {

		Map<String, String> map = new HashMap<String, String>();

		try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(in);
			// 得到 xml 根元素
			Element root = document.getRootElement();
			// 得到根元素的所有子节点
			List<Element> elementList = root.elements();

			for (Element e : elementList) {
				map.put(e.getName(), e.getText());
			}

		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			try {
				in.close();
			} catch (IOException e) {
			}
		}
		return map;
	}
	
	/**
	 * @Description: 生成返回给微信的消息（XML）
	 */
	public static String genTextMessage(MPAccount mp, String openId, String content) {
		return "<xml><ToUserName><![CDATA["+openId+
		"]]></ToUserName><FromUserName><![CDATA["+mp.getId()+"]]></FromUserName><CreateTime>"
		+(new Date().getTime()/1000)
		+"</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA["+content+"]]></Content></xml>";
	}
	
	/**
	 * @Description: 生成返回给微信的链接消息（XML）
	 */
	public static String genLinkMessage(MPAccount mp, String openId, String text, String url) {
		return genTextMessage(mp, openId, String.format("<a href='%s'>%s</a>", url, text));
	}

}